import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

/*
  该 Provider 直接操作 http 请求访问接口
  请优先完善该模块 (GET, POST, PUT, DELETE, OPTIONS... 一般有 GET，POST 就够了)
  为了便于操作，一般把异步操作封装成 Promise 对象
*/
@Injectable()
export class ApiProvider {
  // 基础链接
  public domain = '';

  // api 模块基础链接
  public apiUrl = this.domain + '';

  constructor(public http: HttpClient) {
  }

  /**
   * 封装的 GET 方法
   * @param uri string 接口地址（相对地址，便于后期服务器迁移）
   * @param data any 提交的数据
   * @returns {Promise<any>}
   */
  Get (uri: string, data?: any) {
    return new Promise((resolve, reject) => {
      this.http.get(uri, {params: data ? data : undefined}).toPromise().then((rs: ApiResult) => {
        if (rs.success) {
          resolve(rs.data);
        } else {
          reject(rs.msg)
        }
      }).catch(err => {
        reject(err);
      });
    })
  }

  /**
   * 封装的 POST 方法
   * @param uri string 接口地址（相对地址，便于后期服务器迁移）
   * @param data any 提交的数据
   * @returns {Promise<any>}
   */
  Post (uri: string, data: any) {
    return new Promise((resolve, reject) => {
      this.http.post(uri, data).toPromise().then((rs: ApiResult) => {
        if (rs.success) {
          resolve(rs.data);
        } else {
          reject(rs.msg)
        }
      }).catch(err => {
        reject(err);
      });
    })
  }
}

/**
 * 定义接口返回格式
 */
export interface ApiResult{
  success?: 0|1,
  data?: any,
  msg?: string
}